這步驟主要是讓 Bot 能根據收到的文字訊息作出不同的回覆,實現多樣化回應。
根據關鍵字回應不同訊息
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_msg = event.message.text.lower()
if "天氣" in user_msg:
reply = "今天的天氣很好!"
elif "時間" in user_msg:
reply = "現在是 " + datetime.now().strftime('%H:%M:%S')
elif "笑話" in user_msg:
reply = "為什麼自行車不能站起來?因為它太累了!"
else:
reply = "抱歉,我不太明白你的意思。"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply))
實現模式識別與回應
import re
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_msg = event.message.text.lower()
if re.match(r'\d+ \+ \d+', user_msg):
numbers = list(map(int, re.findall(r'\d+', user_msg)))
result = numbers[0] + numbers[1]
reply = f"計算結果:{result}"
else:
reply = "請輸入例如 '3 + 5' 這樣的格式進行計算。"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply))
這步驟是讓 Bot 能處理並回應用戶發送的圖片,進一步增加 Bot 的互動性。
圖片消息處理流程
ImageMessage
事件到你的 Webhook。你可以用 LINE SDK 下載圖片,並進行進一步處理。from linebot.models import ImageMessage
@handler.add(MessageEvent, message=ImageMessage)
def handle_image(event):
# 下載用戶發送的圖片
message_content = line_bot_api.get_message_content(event.message.id)
# 保存圖片到本地
with open(f"received_image_{event.message.id}.jpg", 'wb') as f:
for chunk in message_content.iter_content():
f.write(chunk)
# 回覆訊息
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text="收到你的圖片了,謝謝!"))
message_id
,並使用 get_message_content
來下載圖片。下載後,我們儲存圖片並回應「收到你的圖片了」。圖片處理與回應
import pytesseract
from PIL import Image
@handler.add(MessageEvent, message=ImageMessage)
def handle_image(event):
message_content = line_bot_api.get_message_content(event.message.id)
img_path = f"received_image_{event.message.id}.jpg"
# 保存圖片到本地
with open(img_path, 'wb') as f:
for chunk in message_content.iter_content():
f.write(chunk)
# 圖像識別 (OCR)
img = Image.open(img_path)
recognized_text = pytesseract.image_to_string(img)
# 回覆識別結果
reply = recognized_text if recognized_text else "我無法讀取圖片中的文字。"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply))
pytesseract
進行圖片文字識別,並將識別到的文字回傳給使用者。這樣,Bot 不僅能接收圖片,還可以對其進行處理。為了讓 Bot 變得更加靈活,應進一步擴展處理不同消息類型的能力,如位置訊息、影片訊息等。
處理位置消息
from linebot.models import LocationMessage
@handler.add(MessageEvent, message=LocationMessage)
def handle_location(event):
reply = f"你的位置:{event.message.address} (經度: {event.message.latitude}, 緯度: {event.message.longitude})"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply))
處理影片消息
from linebot.models import VideoMessage
@handler.add(MessageEvent, message=VideoMessage)
def handle_video(event):
message_content = line_bot_api.get_message_content(event.message.id)
with open(f"received_video_{event.message.id}.mp4", 'wb') as f:
for chunk in message_content.iter_content():
f.write(chunk)
line_bot_api.reply_message(event.reply_token, TextSendMessage(text="收到你的影片了!"))
綜合測試
這一天重點是擴展 Line Bot 的消息處理能力,讓它能夠處理並回應多種不同類型的訊息。經過這些增強後,Bot 不僅能夠處理文字訊息,還能夠處理圖片、位置、影片等更多互動形式,提供更豐富的功能與使用體驗。